#!/usr/bin/env python
# -*- coding: utf-8; -*-

from django import forms
from web.forms.bootstrap import BootstrapForm
from web import models


class IssuesModelForm(BootstrapForm, forms.ModelForm):
    class Meta:
        model = models.Issues
        exclude = [
            'project', 'creator', 'create_datetime', 'latest_update_datetime'
        ]
        # bootstrap-selectpicker 的有点：多选框可以搜索
        widgets = {
            "assign":
            forms.Select(attrs={
                'class': "selectpicker",
                "data-live-search": "true"
            }),
            # 多选
            "attention":
            forms.SelectMultiple(
                attrs={
                    'class': "selectpicker",
                    "data-live-search": "true",
                    "data-actions-box": "true"
                }),
            "parent":
            forms.Select(attrs={
                'class': "selectpicker",
                "data-live-search": "true"
            }),
            "start_date":
            forms.DateTimeInput(attrs={'autocomplete': "off"}),
            "end_date":
            forms.DateTimeInput(attrs={'autocomplete': "off"}),
        }

    def __init__(self, request, *args, **kwargs):
        super().__init__(*args, **kwargs)

        # 处理数据初始化(对新建问题表单内多个单选/多选框对应字段的 choices 列表初始化)

        # 1.获取当前项目的所有问题类型 [(1,'xx'),(2,"xx")], 设计上有两个思路：
        #    1) 在项目设置页面内设置项目初始问题类型，但目前还没有开发
        #    设置页面
        #    2) 创建项目时，代码自动初始问题，见 PROJECT_INIT_LIST
        #    以及 views/project.py创建项目流程。(缺点是对于开发前已存在的项
        #    目，这一步无效，会导致已存在项目的问题新建无法成功选择问题类型
        #    这一必选项，因为为空)

        # 新建问题弹出的模态框表单中第一项的选择列表可选项，由项目(封装在
        # request.tracer.project 中)的 IssuesType 表 title 字段名集合决定
        q_types = models.IssuesType.objects.filter(
            project=request.tracer.project)
        # value_list() 返回格式为元组列表，这里限制问题类型可选范围
        self.fields['issues_type'].choices = q_types.values_list('id', 'title')

        # 2.获取当前项目的所有模块
        module_list = [
            ("", "没有选中任何项"),
        ]
        q_mods = models.Module.objects.filter(project=request.tracer.project)
        module_object_list = q_mods.values_list('id', 'title')
        module_list.extend(module_object_list)
        self.fields['module'].choices = module_list

        # 3.指派和关注者
        # 数据库找到当前项目的参与者 和 创建者
        total_user_list = [
            (request.tracer.project.creator_id,
             request.tracer.project.creator.name),
        ]
        project_user_list = models.ProjectUser.objects.filter(
            project=request.tracer.project).values_list(
                'user_id', 'user__name')
        total_user_list.extend(project_user_list)

        self.fields['assign'].choices = [("", "没有选中任何项")] + total_user_list
        self.fields['attention'].choices = total_user_list

        # 4. 当前项目已创建的问题
        parent_list = [("", "没有选中任何项")]
        parent_object_list = models.Issues.objects.filter(
            project=request.tracer.project).values_list('id', 'subject')
        parent_list.extend(parent_object_list)
        self.fields['parent'].choices = parent_list


class IssuesReplyModelForm(forms.ModelForm):
    class Meta:
        model = models.IssuesReply
        fields = ['content', 'reply']


class InviteModelForm(BootstrapForm, forms.ModelForm):
    class Meta:
        model = models.ProjectInvite
        fields = ['period', 'count']
